using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp11
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Player P = new Player("伟东",1000,1000,150,10);//不输入状态不会报错 因为有一个默认值
            P.ConsoleMyData();
            //创造5个怪物
            Monster.Create(5);
            //休息的次数限制
            int idleNum = 3;
            BaseUnit MonsterTarget = null;//当前的怪物为空
            while (true)
            {
                //
                if (P.NowStart==PlayStart.Idle)
                {
                    //休息状态
                    Console.WriteLine("请输入1进行对战或2进行休息,剩余休息次数"+idleNum);
                    string input=Console.ReadLine();
                    //如果输入的是1就进行战斗 2就进行休息 最多休息3次
                    //连续进行休息  胜利后重置
                    if (input == "1")
                    {
                        P.NowStart = PlayStart.Batter;
                        //进入战斗状态  怪物为设置的其中一个
                        MonsterTarget = Monster.GetRandomMonster();//从所有怪物中随机一个
                        //continue;//直接进入下一个循环
                    }
                    //等于2 就回复
                    else if (input == "2") 
                    {
                        P.CurrentHp += (uint)(P.MaxHP * 0.2f);
                        if (P.CurrentHp>P.MaxHP)
                        {
                            P.CurrentHp = P.MaxHP;
                        }
                        Console.WriteLine("玩家回复" + P.MaxHP * 0.2f + "生命值");
                    }
                    idleNum--;
                    if (idleNum < 0) {
                        //休息回合没有了 强行进入战斗
                        P.NowStart = PlayStart.Batter;
                        //进入战斗状态  怪物为设置的其中一个
                        MonsterTarget = Monster.GetRandomMonster();//从所有怪物中随机一个
                    }
                } 
                else if (P.NowStart==PlayStart.Batter)
                {
                    //战斗的逻辑
                    if (MonsterTarget==null)
                    {
                        MonsterTarget = Monster.GetRandomMonster();//从所有怪物中随机一个
                       //怪物打完了
                        if (MonsterTarget == null)
                        {
                            Console.WriteLine("消灭了所有怪物");
                            return;
                        }
                      
                    }
                    Console.WriteLine("正在战斗中");
                    MonsterTarget.ConsoleMyData();
                    Console.WriteLine("1进行战斗，2释放技能，3逃跑");

                    //玩家进行攻击  怪物收到伤害
                    string input = Console.ReadLine();
                    if (input == "1" ||input=="2")
                    {
                        if (input=="1")
                        {
                            MonsterTarget.GetDamage(P);
                        }
                        else
                        {
                            MonsterTarget.GetDamage2(P);
                        }
                     
                        //击败怪物
                        if (MonsterTarget.CurrentHp <= 0)
                        {
                            Monster.SetMonsterDead(MonsterTarget);//怪物死亡
                            MonsterTarget = null;//目标清空
                                                 //是否继续挑战 还是休息 
                            Console.WriteLine("是否继续挑战。输入0进行休息  其余则进行挑战");
                            input = Console.ReadLine();
                            if (input == "0")
                            {
                                P.NowStart = PlayStart.Idle;
                                idleNum = 3;
                                P.CurrentHp = P.MaxHP;
                                Console.WriteLine("休息回复状态");
                                P.ConsoleMyData();
                                continue;
                            }
                            else
                            {
                                P.NowStart = PlayStart.Batter;
                                MonsterTarget = Monster.GetRandomMonster();
                                continue;

                            }
                        }

                    }
                    //else if (input == "2") 
                    //{
                    //    MonsterTarget.GetDamage2(P);      //击败怪物
                    //    if (MonsterTarget.CurrentHp <= 0)
                    //    {
                    //        Monster.SetMonsterDead(MonsterTarget);//怪物死亡
                    //        MonsterTarget = null;//目标清空
                    //                             //是否继续挑战 还是休息 
                    //        Console.WriteLine("是否继续挑战。输入0进行休息  其余则进行挑战");
                    //        input = Console.ReadLine();
                    //        if (input == "0")
                    //        {
                    //            P.NowStart = PlayStart.Idle;
                    //            idleNum = 3;
                    //            P.CurrentHp = P.MaxHP;
                    //            continue;
                    //        }
                    //        else
                    //        {
                    //            P.NowStart = PlayStart.Batter;
                    //            MonsterTarget = Monster.GetRandomMonster();
                    //            continue;

                    //        }
                    //    }
                    //}
                    //玩家逃跑
                    else if (input == "3")
                    {
                        //进行怪物的等级判断  低于玩家必定逃跑成功
                        //高于1级 降低5%几率
                        if (MonsterTarget.lever <= P.lever)
                        {
                            Console.WriteLine("逃跑成功");
                            P.NowStart = PlayStart.Idle;
                            idleNum = 3;
                            continue;
                        }
                        else
                        {
                            //计算成功率  利用随机函数
                            uint Leveloffset = MonsterTarget.lever - P.lever;
                            Random r = new Random();
                            if (r.Next(0, 100) < 100 - Leveloffset * 5)
                            {
                                Console.WriteLine("逃跑成功");
                                P.NowStart = PlayStart.Idle;
                                idleNum = 3;
                                continue;
                            }
                            else
                            {
                                Console.WriteLine("逃跑失败");
                                //失败  不执行任何动作
                            }
                        }
                    }
                    //到怪物回合
                    P.GetDamage(MonsterTarget);
                    if (P.CurrentHp <= 0)
                    {
                        Console.WriteLine("玩家失败");
                        return;
                    }
                }
            }
         

        }
        static void Test1()
        {
            //造一个主角类和一个怪物类
            BaseUnit Player = new BaseUnit();
            //怪物最大生命值  当前生命值 攻击力  等级
            BaseUnit Monster = new BaseUnit("馒头精", 50, 50, 5, 1);
            //显示属性
            Console.WriteLine("主角属性");
            Console.WriteLine($"名称:{Player.Name}\n" + $"生命:{Player.CurrentHp}\n" + $"攻击力:{Player.Attack}\n" + $"等级{Player.lever}");
            Console.WriteLine("-----------------------------");
            Console.WriteLine("怪物属性");
            Console.WriteLine($"名称:{Monster.Name}\n" + $"生命:{Monster.CurrentHp}\n" + $"攻击力:{Monster.Attack}\n" + $"等级{Monster.lever}");
            Console.WriteLine("-----------------------------");

            //第二部创建属性 --经验
            //字段  被直接赋值   属性 可以进行自定义的额外操作
            //当前的经验值 与升级所需要的经验值
            Console.WriteLine($"主角经验:{Player.CurrentExp}/{Player.NeedExp}");
            //获取35点经验
            Console.WriteLine("获取35点经验");
            Player.CurrentExp = 35;
            Console.WriteLine($"主角经验:{Player.CurrentExp}/{Player.NeedExp}");
            //但是我们再次获取35点 不能直接赋值=35  应该使用+=35
            Console.WriteLine("再次获取35点经验");
            Player.CurrentExp += 35;
            Console.WriteLine($"主角经验:{Player.CurrentExp}/{Player.NeedExp}");
        }
        static void Test2()
        {
            BaseUnit Player = new BaseUnit();
            Player.Name = "张大炮";
            //怪物最大生命值  当前生命值 攻击力  等级
            BaseUnit Monster = new BaseUnit("馒头精", 50, 50, 5, 1);

            //使用函数来简化这些打印
            Player.ConsoleMyData();
            Monster.ConsoleMyData();
            //受到伤害后的属性
            Player.GetDamage(Monster);

            Player.GetExp(1000);
            Player.ConsoleMyData();
        }
        /// <summary>
        /// 创建10个怪物 手动输入一个角色名 使用123控制技能  
        /// </summary>
        static void Test3()
        {
            Monster.Create(10);
            Monster.LifeMons.ForEach(x => x.ConsoleMyData());

            //定义回合数  奇数是玩家   偶数是怪物
            int index = 0;

            //使用控制台进行打印  利用while循环    控制台输入为  console.ReadLine()
            //生成一个玩家
            string PlayerName = Console.ReadLine();
            BaseUnit Player = new BaseUnit(PlayerName, 200, 200, 50, 1);

            var monster = Monster.LifeMons[new Random().Next(0, Monster.LifeMons.Count)];

            while (true)
            {
                //怪物死亡后重新生成怪物
                if (monster.CurrentHp <= 0)
                {
                    monster = Monster.LifeMons[new Random().Next(0, Monster.LifeMons.Count)];
                    Console.WriteLine($"遇到了新怪物{monster.Name}");
                };
                bool playerDo = index % 2 == 0;//余数为0是偶数 为怪物回合
                if (playerDo)
                {
                    Console.WriteLine($"玩家{Player.Name}的回合");
                    string input = Console.ReadLine();
                    Console.WriteLine(input);
                    if (input == "1") //输入了1  这里会有问题  ==的问题
                    {
                        monster.GetDamage(Player);
                    }
                    else if (input == "2")
                    {
                        monster.GetDamage2(Player);
                    }
                    else if (input == "3")
                    {
                        monster.Restoration(Player);
                    }

                }
                else
                {
                    Console.WriteLine($"怪物{monster.Name}回合");
                    //怪物的攻击回合
                    Player.GetDamage(monster);
                    //玩家被打死 游戏结束
                    if (Player.CurrentHp <= 0)
                    {
                        Console.WriteLine($"{Player.Name}被击杀，游戏结束");
                        break;
                    }

                }
                index++;

                //随机怪物出现作为对战目标


            }
        }
        static void Test4()
        {
            Player p = new Player();
            //Player p2 = new BaseUnit("ceshi",10,10,30,4); 子类无法使用父类的带参函数  需要重构
            Player p2 = new Player("ceshi", 10, 10, 30, 4);
            p2.ConsoleMyData();
        }
    }
}
